# 作者： 李泉志
# 2025年01月08日19时17分秒
# 2947029073@qq.com
"""
02. 多继承
2.1 多继承的使用注意事项
问题的提出
• 如果不同的父类中存在同名的方法，子类对象在调用方法时，会调用哪一个父类中的方法呢？
提示：开发时，应该尽量避免这种容易产生混淆的情况！
—— 如果父类之间存在同名的属性或者方法，应该尽量避免使用多继承

Python 中的 MRO —— 方法搜索顺序（知道）
• Python中针对类提供了一个内置属性__mro__可以查看方法搜索顺序
• MRO是method resolution order，主要用于在多继承时判断方法、属性的调用路径
print(C.__mro__) # 是类名C不是对象c
• 在搜索方法时，是按照__mro__的输出结果从左至右的顺序查找的
• 如果在当前类中找到方法，就直接执行，不再搜索
• 如果没有找到，就查找下一个类中是否有对应的方法，如果找到，就直接执行，不再搜索
• 如果找到最后一个类，还没有找到方法，程序报错
它实际上就是合并所有父类的MRO列表并遵循如下三条准则:
1.子类会先于父类被检查
2.多个父类会根据它们在列表中的顺序被检查
3.如果对下一个类存在两个合法的选择,选择第一个父类
"""


class A:
    def test(self):
        print("A.test()")

    def demp(self):
        print("A.demp()")


class B:
    def test(self):
        print("B.test()")

    def demp(self):
        print("B.demp()")


class C(B, A):
    pass


if __name__ == '__main__':
    c = C()
    c.test()  # B.test() 按照从左到右的顺序，直到找到方法
    print(C.__mro__)  # 查看C的查找顺序
